<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归求和前语法注意事项</title>
</head>
<body>
    
</body>
<script>
    /*
        求和的例子 
            我们之前已经做了很多遍了 JS提供了很多丰富的方法可以让我们间接的求和 
                例如之间转换成为数组之后  使用reduce方法 我们可以很方便的求和
        再没有推出这些功能之前 其实我们呢可以是可以通过递归来进行求和的
            使用递归的注意事项 -- 
                1，先判断再什么情况下  函数该停止递归
                2，第一次递归时的表达式
    */
    
    // 使用之前数组的方法求和
    let res = [5,8,7,6,9,1,2].reduce((pre,item)=>pre+item)
    console.log(res)  //38

    // 使用递归的方式计算
    function sum(...args){
        /*
            因为是求和操作 所以在最后一次满足的时候  要return出0  也就是在最后一次递归加的是0
        */
        if(args.length === 0){
            return 0
        }
        /*
            递归思路：
                当数组的长度不等于0的时候 将数组的最后一个元素弹出 剩下的元素在次执行这个函数   做到递归的操作
        */
        // pop() 在数组的最后段弹出一个元素  数组的长度也会-1
        return args.pop() + sum(...args)
    }
    console.log(sum(5,8,7,6,9,1,2))  //38
</script>
</html>